/*
*  heapADT.c
*  =========
*  Contrato que define un ADT para la estructura parva
*  modificacion: soporta datos genericos, contempla una funcion
*  de comparacion, pero NO funcion de copia o liberacion.
*/

#ifndef __HEAP_H
#define __HEAP_H

typedef struct{
	int len;
	float ic;
}elementType;


//typedef int* elementType;

typedef struct heapCDT *heapADT;

heapADT NewHeap( int(*compFn)(elementType elem1, elementType elem2), void(*printFn)(elementType elem) );

void FreeHeap(heapADT parva);

int HeapIsEmpty(heapADT parva);

void InsertElement(heapADT parva, elementType elem);

/*
*  Retorna 0 si logro recuperar el proximo dato de la parva.
*  En el parametro elem, luego de la llamada, tengo el proximo
*  dato de la parva.
*  Retorna 1 si la parva no estaba inicializada
*  Retorna 2 si la parva estaba vacia
*/
int GetElement(heapADT parva, elementType *elem);

/*seria mejor un iterador*/
void ListElements(heapADT parva);

#endif
